$(document).ready(function () {
    var step = $('#step-tracking').val();
    var $large_image = $('<img alt="large image" id="item-large-image"/>').appendTo($('body'));
    var cache = {};

    $large_image.hide();

    $('.item-large-image').hover(
        function (event) {
            $('body').addClass('item-large-image-wrap');
            $large_image.attr('src', $(this).attr('src')).css({
                left:event.pageX,
                top:event.pageY
            });
            if ($large_image.queue().length <= 1) {
                $large_image.show(500);
            }
        },
        function () {
            if ($large_image.queue().length <= 1) {
                $large_image.fadeOut(300);
            }
            $('body').removeClass('item-large-image-wrap');
        }
    );

    /**
     * Xử lý khi thay đổi số lượng
     */
    var $loadingImage = $('<img id="change-price-loading">').css({
        display:'block',
        margin:'0 auto'
    });
    $loadingImage.attr('src', Py.markUpUrl('images/ajax-loader.gif'));

    $('td.item-quantity input').keyup(function () {
        var item_id = $(this).metadata().id;
        var $this = $(this);
        var numRegex = /^\d+$/;
        if (numRegex.test($this.val())) {
            var $tdPrice = $('#item-' + item_id + ' td.total');
            $tdPrice.removeClass('error')
                .empty().prepend($loadingImage);
            $.post(Py.markUpUrl('shop/change'), {
                id:item_id,
                quantity:$this.val()
            }, function (data) {
                console.log(data);
                $tdPrice.empty().text(data['new_price']);
                $('#checkout-total').text(data['new_total']);
            }, 'json');

        } else {
            $('#item-' + item_id + ' td.total').addClass('error');
        }
    });

    /**
     * Xử lý xóa sản phẩm
     */
    $('td.item-delete a').click(function (event) {
        event.preventDefault();
        var item_id = $(this).metadata().id;
        var ajax_handle = $.post(Py.markUpUrl('shop/remove'), {
            id: item_id,
            no_html: true
        }, function (data) {
            if (data['code'] > 0) {
                $('#item-' + item_id).fadeOut(500, function () {
                    $(this).remove();
                    $('#checkout-total').text(data['new_total']);
                });
            } else if (data['code'] == 0) {
                jModal.open({
                    content:'Không còn sản phẩm trong giỏ hàng, vui lòng thực hiện mua hàng thêm',
                    title:'Giỏ hàng rỗng',
                    on_close: function() {
                        Py.go(Py.markUpUrl('/'));
                    }
                });
            } else {
                jModal.open({
                    content:'Xóa giỏ hàng thất bại',
                    title:'Lỗi xóa giỏ hàng',
                    type:'error'
                });
            }
        }, 'json');

        /*
        ajax_call_completed || jModal.open({
            content:'Đang thực hiện xử lý, vui lòng đợi giây lát',
            title:'Xóa sản phẩm trong giỏ hàng',
            on_cancel:function () {
                ajax_handle.abort();
            }
        });
        */
    });

    /* bước tiếp theo */
    $('#next-step.step-1').click(function (e) {
        e.preventDefault();
        // Kiểm tra số lượng hợp lệ
        if ($('td.error').length > 0) {
            jModal.open({
                content:'Vui lòng điền số lượng hợp lệ',
                title:'Số lượng sai',
                type:'error',
                on_cancel:function () {
                    $('td.error').first().siblings('td.item-quantity').children('input').focus();
                }
            })
        } else {
            $('#checkout-step-1').slideUp(300, function () {
                $('#checkout-step-2').slideDown(300);
                $('#next-step.step-1').removeClass('step-1').addClass('step-2');
                $('#checkout-nav-step-2').addClass('finished');
            });
        }
    });

    /* Submit thông tin bước 2 */
    var $ten = $('#hoten');
    var $diachi = $('#diachi');
    var $sodt = $('#sodt');
    var $user = $('#username');
    var $email = $('#email');
    var $pass = $('#password');
    var $r_pass = $('#re-password');
    var emptyRegex = /^\s*$/;
    var emailRegex = /\w+@(\w+\.)*\w+\.\w{2,4}/;
    var phoneNumRegex = /^\d{9,11}$/;
    var form_data = {};
    $('#next-step.step-2').live('click', function (event) {
        event.preventDefault();
        if (emptyRegex.test($ten.val())) {
            jModal.open({
                content:'Vui lòng nhập tên khách hàng!',
                title: 'Lỗi nhập thông tin',
                type:'error',
                on_cancel: function() {
                    $ten.focus();
                }
            });
        } else if (emptyRegex.test($diachi.val())) {
            jModal.open({
                content:'Vui lòng nhập thông tin địa chỉ giao hàng cụ thể!',
                title: 'Lỗi nhập thông tin',
                type:'error',
                on_cancel:function () {
                    $diachi.focus();
                }
            });
        } else if (!phoneNumRegex.test($sodt.val())){
            jModal.open({
                content:'Vui lòng nhập số điện thoại hợp lệ',
                type:'error',
                on_close: function() {
                    $sodt.select().focus();
                }
            });
        } else {

            form_data['hoten'] = $ten.val();
            form_data['diachi'] = $diachi.val();
            form_data['sodt'] = $sodt.val();

            // Nếu đăng kí khách hàng
            if ($('#dangki').is(':checked')) {
                if (emptyRegex.test($user.val())) {
                    jModal.open({
                        content:'Vui lòng nhập thông tên đăng nhập!',
                        title: 'Lỗi nhập thông tin',
                        type:'error',
                        on_cancel:function () {
                            $user.focus();
                        }
                    });
                } else if (!emailRegex.test($email.val())) {
                    jModal.open({
                        content:'Vui lòng nhập email hợp lệ',
                        title: 'Lỗi nhập thông tin',
                        type:'error',
                        on_cancel:function () {
                            $email.focus();
                        }
                    });
                } else if (emptyRegex.test($pass.val())) {
                    jModal.open({
                        content:'Vui lòng nhập mật khẩu!',
                        title: 'Lỗi nhập thông tin',
                        type:'error',
                        on_cancel:function () {
                            $pass.focus();
                        }
                    });
                } else if ($pass.val() != $r_pass.val()) {
                    jModal.open({
                        content:'Nhập lại mật khẩu không khớp, vui lòng nhập lại',
                        title: 'Lỗi nhập thông tin',
                        type:'error',
                        on_cancel:function () {
                            $r_pass.focus();
                        }
                    });
                } else {
                    // Check exist user
                    $.post('user/exists', {
                        user: $user.val()
                    },function(data) {
                        if (data['code'] == 0) {
                            jModal.open({
                                content: 'Vui lòng chọn tên đăng nhập khác',
                                title: 'Trùng tên đăng nhập',
                                type: 'error'
                            });
                        } else {
                            form_data['user'] = $user.val();
                            form_data['email'] = $email.val();
                            form_data['pass'] = $pass.val();
                            go_step3();
                        }
                    }, 'json');
                }
            } else {
                go_step3();
            }
        }
    });

    var go_step3 = function () {
        $('#next-step.step-2').removeClass('step-2').addClass('step-3');
        $('#checkout-nav-step-3').addClass('finished');
        $('#checkout-step-2').slideUp(500, function() {
            $('#checkout-step-3').slideDown(500);
            $('#checkout-step-2').remove();
        });
        step3_get();

        $('#next-step.step-3 span').text('Hoàn tất');
    };



    $('#next-step.step-3').live('click', function (event) {
        event.preventDefault();
        var ajax_handle = $.post(Py.markUpUrl('shop/order'), form_data, function(response) {
            if (response['code'] == 0) {
                jModal.open({
                    content: 'Đặt hàng hoàn tất, chúng tôi sẽ liên lạc với bạn trong vòng 24 giờ!',
                    title: 'Đặt hàng thành công',
                    on_close: function() {
                        Py.go(Py.markUpUrl('/'));
                    }
                });
            } else {
                jModal.open({
                    content: 'Xảy ra lỗi trong quá trình đặt hàng, bạn vui lòng kiểm tra lại',
                    title: 'Đặt hàng',
                    type: 'error',
                    on_close: function() {
                        window.location.reload();
                    }
                });
            }
        }, 'json');
    });

    $('#dangki').click(function() {
        if ($(this).is(':checked')) {
            $('#register-group').slideDown(500);
        } else {
            $('#register-group').slideUp(500);
        }
    });

    var step3_get = function() {
        $.post('', function(data) {
            console.log(data['checkout_items']);
            if (data['checkout_items']) {
                var $tbody = $('#checkout-detail').empty();
                for (x in data['checkout_items']['items']) {
                    var row = data['checkout_items']['items'][x];
                    $tbody.append($('<tr></tr>').append(
                        $('<td></td>').text(row['dt_ten']),
                        $('<td></td>').text(row['dt_gia']),
                        $('<td></td>').text(row['quantity']),
                        $('<td></td>').text(row['total_formatted']))
                    );
                }
                $('#checkout-confirm-total').text(data['checkout_items']['total_formatted']);
            }
        }, 'json');

        $('#checkout-confirm-ten').text(form_data['hoten']);
        $('#checkout-confirm-diachi').text(form_data['diachi']);
        $('#checkout-confirm-sodt').text(form_data['sodt']);


    };


    /* Khởi tạo giao diện */
    $('input.required').each(function () {
        var $required_sign = $('<span>*</span>').css({
            color:'red',
            marginRight:'5px'
        });
        $(this).before($required_sign);
    });

    $('#get-info-link').click(function(e) {
        e.preventDefault();
        var ajax_handle = $.post(Py.markUpUrl('user/current'), function(data) {
            $ten.val(data['u_ten']);
            $diachi.val(data['u_diachi']);
            $sodt.val(data['u_sodt']);
        }, 'json');
    });

    $('#sodt').keyup(function() {
        var errClass = 'invalid';
        if (phoneNumRegex.test($(this).val())) {
            $(this).removeClass(errClass);
        }  else {
            $(this).addClass(errClass);
        }
    });
});
